// 用户登录和注册的表单项验证的通用代码

class FieldValidator{
    /**
     * 
     * @param {String} txtId 文本框的ID
     * @param {Function} validatorFunc 验证规则函数，当需要对该文本框进行验证时，会调用该函数，
     */
    constructor(txtId,validatorFunc) {
        this.input = $('#'+txtId);
        this.p = this.input.nextElementSibling  //获取input下一个兄弟原始
        this.validatorFunc = validatorFunc;
        // 文本框失去焦点的时候验证
        this.input.onblur = ()=>{
            this.validate();
        }
    }
    /**
     * 验证，成功返回true，失败返回false
     */
    async validate() {
        const err = await this.validatorFunc(this.input.value);
        if(err) {
            this.p.innerText = err;
            return false;
        }else{
            this.p.innerText = '';
            return true;
        }
    };

    /**
     * 对传入的所有验证器进行统一的验证，若所有的验证通过返回true，否则返回false
     * @param  {FieldValidator[]} validators 
     */
    static async validate(...validators) {
        const proms = validators.map(s=>s.validate());
        console.log(proms);
        
        const result = await Promise.all(proms);
        return result.every((r)=>r);
        
    }
}


// FieldValidator.validate(loginIdValidator,nicknameValidator).then(
//     (result)=>{
//         console.log(result)
//     }
    
// )
